数据库

  1. python2.5之后自带sqlite3数据库
import sqlite3
#不存在test.db数据库,就会自动重建
conn = sqlite3.connect('test.db')
c = conn.cursor()
c.execute('insert into articleInfo (title,url,date,wechatName,state) values(?,?,?,?,?)',(self.title[0].text,self.url,self.date[0].text,self.gzh[0].text,self.state))
conn.commit()
conn.close()

  1. 使用mysql
    安装:pip install mysql-connector-python -i https://pypi.doubanio.com/simple
   python
import mysql.connector
conn = mysql.connector.connect(user='root', password='password', database='test', charset='utf8')
cursor = conn.cursor()
cursor.execute('create table user (id varchar(20) primary key, name varchar(20))')
cursor.execute('select * from user where id = %s', ('1',))
values = cursor.fetchall()
flag= cursor.rowcount
conn.commit()
cursor.close()

  1. 使用selenium编写爬虫,爬取微信公众号文章//安装 pip install selenium
  • 浏览器驱动安装(将chromedriver.exe或geckodriver.exe加入环境变量,版本注意要和浏览器版本兼容)
  1. http://npm.taobao.org/mirrors/chromedriver/

ip代理

网站:携趣http代理

提供每天一条免费长效代理(需要和客服沟通获得账号和密码)或临时ip

qtdesigner安装

pip install pyqt5

pip install PyQt5-tools

\Python\Python37\Lib\site-packages\pyqt5_tools\Qt\bin下designer.exe

写入文件

with open("爬虫日志.txt", "a", encoding="utf-8") as f:
f.write(message+'\n')

创建目录

import os
try:
path='./发改局信息文件夹'
isExists=os.path.exists(path)
if not isExists:
os.mkdir(path)
else:
print('./发改局信息文件夹存在')
except Exception as e:
print('创建文件夹失败')

操作excel

import xlwt
wb = xlwt.Workbook()
ws = wb.add_sheet(sheetName,cell_overwrite_ok=True)
ws.write(0,1,'环比(上月=100)') # 前两个参数为行和列
ws.write(0,2,'同比(上年同月=100)')
ws.write(0,3,'定基(2015年=100')
wb.save('./国家统计局数据.xls')

tkinter界面

from tkinter import *
import threading
# 此方法为了防止按钮点击下去,函数还未处理完成,按钮将不会弹上来,加入多线程,让界面和处理异步
def button_func():
th=threading.Thread(target=main) #main是处理函数
th.start()
win = Tk()
win.title('soei数据爬取工具')
win.geometry("400x400+200+50")
lb = Label(win,text='房地产宏观经济指标需求信息爬取',fg='blue')
lb.pack()
h1 = BooleanVar() #设置选择框对象
h2 = BooleanVar()
cb1 = Checkbutton(win,text='所有数据',variable=h1,command=judgeChoose)
cb1.pack()
cb2 = Checkbutton(win,text='当月数据',variable=h2,command=judgeChoose)
cb2.pack()
button=Button(win,command=button_func,text='开始爬取')
button.pack()
text=Text(win,width=30,height=10)
text.pack()
#text插入
text.insert('insert','爬取完成')
#text获取值
value=text1.get('0.0', 'end')
win.mainloop()

#treeview控件
tree=ttk.Treeview(win,columns=['1','2','3','4'],show='headings')
# tree.column('1',width=280,anchor='center')
tree.column('1',width=280)
tree.column('2',width=90)
tree.column('3',width=90)
tree.column('4',width=60,anchor='center')
tree.heading('1',text='文章名')
tree.heading('2',text='发布日期')
tree.heading('3',text='公众号')
tree.heading('4',text='是否有效')
#----vertical scrollbar------------滑动条
vbar = ttk.Scrollbar(win,orient=VERTICAL,command=tree.yview)
tree.configure(yscrollcommand=vbar.set)
tree.grid(row=1,column=1,columnspan=4,sticky=NSEW)
vbar.grid(row=1,column=5,sticky=NS)
#输入框
entry=Entry(win,width=30)
entry.grid(row=0,column=1)
#entry值获取
url=entry.get()
#treeview值输入
value=(self.title[0].text,self.date[0].text,self.gzh[0].text,flag)
#弹出提示框
tkinter.messagebox.askokcancel('提示','下载结束')
tree.insert('','end',values=value)

python爬虫及其他知识记录_mysql

获取返回json数据

import json
#根据response=requests.get(url)获取返回的response
owDataNode = json.loads(response.text).get('returndata').get('wdnodes')[0].get('nodes')[0]

获得系统时间

>> import datetime
>>> print('系统时间: '+datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
系统时间: 2020-01-16 12:00:13
#----------------------------------------
>> import time
>> bTime=time.time()
>> eTime=time.time()
>> totalTime=eTime-bTime
>> a =totalTime/60
>> b =totalTime%60
>> print('总用时: '+str(int(a))+'分'+str(int(b))+'秒')
总用时: 4分48秒

selenium使用(chrome)

//安装
pip install selenium

chromedriver.exe(浏览器驱动,需要与浏览器版本匹配)设置环境变量

opt = webdriver.ChromeOptions()
#设置chrome浏览器为无头模式----------------------
# opt.add_argument('--headless')
#----------------------------------------------
#不加载图片-------------------------------------
# prefs = profile.managed_default_content_settings.images":2}
# opt.add_experimental_option("prefs",prefs)
#----------------------------------------------
#请求头设置
opt.add_argument('user-agent='+str(UserAgent().random))
#代理ip设置
ip='ip:port'
opt.add_argument('--proxy-server=http://' +ip)
browser = webdriver.Chrome(options = opt)
#获得当前页面的url
url=browser.current_url
#由xpath匹配并获取元素
title=browser.find_elements_by_xpath('/html/body/div[2]/div[1]/div[3]/ul/li['+str(i)+']/div[2]/h3/a')
#输出元素的文字
print(title[0].text)
#根据xpath查找元素并移动到该元素处并点击
action=ActionChains(browser) elementLocation=browser.find_elements_by_xpath('/html/body/div[2]/div[1]/div[3]/ul/li['+str(i)+']/div[2]/h3/a')[0] action.move_to_element(elementLocation).click().perform()

xpath语法

.//div[@class="TRS_PreAppend"]/div[2]/table/tbody/tr[1]/td[2]/p/span/text()
//*[@id="sogou_vr_11002601_account_1"]

requests库使用

  • get请求
import requests
from fake_useragent import UserAgent
headers= {'User-Agent':str(UserAgent().random)}
#设置请求头和超时时间
response =requests.get(url,headers=headers,timeout=5)
#返回码:200,404
code=response.status_code
#返回页面源码
content=response.text

  • post请求
  data={'page':page,'size':size,'sort':'','id':id,'buildNo':buildNo}
response=requests.post(url,data,headers=headers)

urllib下载图片

 import urllib.request
response=urllib.request.urlopen(url)
img=response.read()
name=tname
with open(name,'wb') as f:
f.write(img)

输出错误

import traceback
try:
except Exception as e:
print(traceback.format_exc())

删除文件

import os
os.remove(File)
------------------------
#如果文件存在,就删除
if os.path.exists(File):
os.remove(File)
------------------------
#可以一次创建父目录和子目录
#path='duzhenwen\\file\\'
makeDir(path)

退出进程

#如果执行失败,不退出,会导致进程一致被占用,无法使用其占用的文件
#执行失败,返回1
os._exit(1)
#执行成功,返回0
os._exit(0)

字符串中是否包含另一字符串

if (str1.find('str2'))!=(-1);  #查找不到返回-1
str3=str1.replace('old','new') #用new替換old

读取json文件

jsonString=open(jsonFile,encoding='utf-8')
jsonData=json.load(jsonString)
#读取
name=jsonData['name']
#关闭
jsonString.close()
os.remove(jsonFile)



关注微信公众号:菜鸟阿都,一起交流学习