最近整理下之前学python时写过的小爬虫,写的第一个爬虫就是豆瓣top250电影。用到requests,lxml和pymysql。
思路就是先利用xpath语法和etree解析网页抓取一个页面的内容,利用Google的浏览器自带的copy xpath即可得到对应元素的xpath路径,再找到翻页按钮的链接并返回链接作为下一次调用,用for循环和while循环轻松实现爬取。然后就是pymysql的基本操作,先connect你的数据库,注意设定编码:charset=‘ ’,定义你的cursor,让cursor执行你的操作,最后需要close数据库。
import requests
from lxml import etree
import pymysql
db = pymysql.connect('localhost','你的用户名','你的密码','你的数据库名',charset = 'utf8')
cursor = db.cursor()
url = 'https://movie.douban.com/top250'
def xun(url):
res = requests.get(url).text
s = etree.HTML(res)#利用lxml的etree解析网页
for i in range(1,26):
a = '//*[@id="content"]/div/div[1]/ol/li[{}]/div/div[2]/div[1]/a/span[1]/text()'.format(i)
b = '//*[@id="content"]/div/div[1]/ol/li[{}]/div/div[2]/div[2]/div/span[2]/text()'.format(i)
c = '//*[@id="content"]/div/div[1]/ol/li[{}]/div/div[2]/div[2]/p[1]/text()'.format(i)
m = s.xpath(a)[0]
p = s.xpath(b)[0]
d_s = s.xpath(c)
sql = "insert into movies_detail (movies,score,director_actor,year_type) values (%s,%s,%s,%s)"#被插入的项名不能加引号,与MySQL操作不同
cursor.execute(sql,(m,p,d_s[0].strip(),d_s[1].strip()))#当被插入的数据项有多个时,如(插入语句,(属性1,属性2,属性3.。。)),否则数据插不进
db.commit()
nextpage = s.xpath('//*[@id="content"]/div/div[1]/div[2]/span[3]/a/@href')#用/@href抓取翻页链接
if nextpage:
return 'https://movie.douban.com/top250' + nextpage[0]
return None
while url:#循环翻页
url = xun(url)
db.close()

9634

被折叠的 条评论
为什么被折叠?



