所用到的模块(需要提前安装好):
requests、BeautifulSoup、lxml、mysql.connector(或者pymysql也可以,如果不想插入到数据库,只需要将里边相关的代码删除)
(代码下边将贴出本文beautifulsoup的使用)
代码:
import requests
from bs4 import BeautifulSoup
import mysql.connector
def get_pages_link():
# 插入到数据库
conn = mysql.connector.connect(user='root', password='root', database='test')
cursor = conn.cursor()
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36',
'Connection': 'keep-alive'
}
for item in range(0, 250, 25):
url = "https://movie.douban.com/top250?start={}".format(item)
web_data = requests.get(url, headers=header)
soup = BeautifulSoup(web_data.content, 'lxml')
for movie in soup.select('#wrapper li'):
#href = movie.select('.hd > a')[0] # 链接
href=movie.find('a')["href"]
name = movie.select('.hd > a > span')[0].text # 片名
star = movie.select('.rating_num')[0].text # 评分
people = movie.select('.star > span')[3].text # 评价人数
try:
quote = movie.select('.inq')[0].text
except:
print('没有quote哦')
quote = None
data = {
# 'url': href,
'评分': star,
'片名': name,
'名言': quote,
'评价人数': people
}
sql = 'insert into doubantop250(score,name,quote,people) values (%f,"%s","%s","%s")' % (
float(star), name, quote, people)
cursor.execute(sql)
conn.commit()
print(data)
# print(movie)
print('\n' + '-' * 50 + '\n')
# 关闭数据库
cursor.close()
conn.close
if __name__ == '__main__':
get_pages_link()
因为这个爬虫是跟着微信里的一篇文章学的,所以设置为转载~
里边的加入到mysql数据库是自己边写边学的,然而下边这行代码困扰了我一个上午!
sql = 'insert into doubantop250(score,name,quote,people) values (%f,%s,%s,%s)' % (
float(star), name, quote, people)
本来这事很正常的插入数据库的操作,但一直报错,因为字符串是汉字类型的,自己写小demo是可以插入字母、数字的,但是一到汉字这就报错,,后来查了好多内容才知%s需要加引号。。。。
sql = 'insert into doubantop250(score,name,quote,people) values (%f,"%s","%s","%s")' % (
float(star), name, quote, people)
**********我是分割线**********
下边讲一下从代码里学到的东西:
soup = BeautifulSoup(web_data.content, 'lxml')
将html内容解析为soup文档
soup.select('#wrapper li')
获取文档里边id是wrapper,标签为li的所有内容
href=movie.find('a')["href"]
获取标签为 a 里边的 href(对应的html里的:)
name = movie.select('.hd > a > span')[0].text
获取标签为a 里 标签为span的内容,里边有三个span,name是对应的第一个,所以下标为0
更多关于beautifulsoup的使用可以查看对应的官方文档
本文学习参考的文章还有这篇文章使用BeautifulSoup和lxml解析网页中的元素(一)