〇、前情提要
如果有更新了请提醒我写笔记。
然后突然想起来我冲过小甲鱼的会员,那就跟着小甲鱼学一下吧,后续如果在b站看到了补充的还会再继续写笔记。
参考:
- 【爬虫篇】《极客Python之效率革命》(小甲鱼)
https://www.bilibili.com/video/av23695737/?p=1 - [模块档案] Requests 模块帮助文档(小甲鱼版)
https://fishc.com.cn/thread-95893-1-1.html - [模块档案] BeautifulSoup4 帮助文档(小甲鱼版)【更新中】
https://fishc.com.cn/thread-97807-1-1.html - [模块档案] openpyxl 模块中文文档(一个读写 EXCEL 文件的模块)
https://fishc.com.cn/forum.php?mod=viewthread&tid=101547&extra=page%3D1%26filter%3Dtypeid%26typeid%3D701 - [模块档案] Python3 如何优雅的使用正则表达式
https://fishc.com.cn/thread-99281-1-1.html
------------第一课------------
- 爬取豆瓣 TOP250 电影排行榜
https://fishc.com.cn/thread-94979-1-1.html - 豆瓣电影 Top 250
https://movie.douban.com/top250
------------第二课------------
- [爬虫] 2017年中国主要城市房价工资比排行榜
https://fishc.com.cn/thread-104965-1-1.html - 2017全国城市房价 工资排行榜出炉!
https://news.house.qq.com/a/20170702/003985.htm
------------第三课------------
- [爬虫] 爬取网易云音乐的精彩评论
https://fishc.com.cn/forum.php?mod=viewthread&tid=100435&extra=page%3D1%26filter%3Dtypeid%26typeid%3D711
------------第四、五课------------
- [爬虫] 统计淘宝某宝贝的销量
https://fishc.com.cn/forum.php?mod=viewthread&tid=98908&extra=page%3D1%26filter%3Dtypeid%26typeid%3D711
------------第六课------------
- [爬虫] 找出B站最受欢迎的编程课程
https://fishc.com.cn/thread-140044-1-1.html
P1、爬取豆瓣TOP250电影排行榜
Requests模块
[模块档案] Requests 模块帮助文档(小甲鱼版)
https://fishc.com.cn/thread-95893-1-1.html
使用时需要点击目录跳转到页面。
安装:
pip3 install requests
pipenv install requests
(如果你的机子上还没有安装 pipenv请先安装 pipenv,pip3 install pipenv
)
BeautifulSoup4模块
[模块档案] BeautifulSoup4 帮助文档(小甲鱼版)【更新中】
https://fishc.com.cn/thread-97807-1-1.html
安装:
pip3 install beautifulsoup4
开发思路
演示
有反爬机制,要在代码前添加headers,或者在requests的时候加header(我用了这种)。
import requests
import bs4
# ①win
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0"}
res = requests.get("https://movie.douban.com/top250")
# ②mac
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15"}
res = requests.get("https://movie.douban.com/top250")
# ③模仿成浏览器
res=requests.get('https://movie.douban.com/top250',headers={
'user-agent':'Mozilla/5.0'})
soup = bs4.BeautifulSoup(res.text, "html.parser")#指定的解析器
targets = soup.find_all("div", class_="hd")
for each in targets:
print(each.a.span.text)
修改后成功爬到该页信息
我的笔记-【Python】mac反爬虫 豆瓣为例
https://blog.csdn.net/weixin_43210113/article/details/107508693
代码解释
targets = soup.find_all("div", class_="hd")
targets 为类为hd的div
each.a.span.text
div.a.span第一个text的内容
爬取全部
第一页
https://movie.douban.com/top250?start=0&filter=
第二页
https://movie.douban.com/top250?start=25&filter=
->https://movie.douban.com/top250?start=25的倍数
&filter=
host = “https://movie.douban.com/top250”
url = host + ‘/?start=’ + str(25 * i)
find_movies(res)方法里读取了电影名、评分、资料
result 里存返回值
最后保存到豆瓣TOP250电影.txt文件里
import requests
import bs4
import re
def open_url(url):
# 使用代理
# proxies = {"http": "127.0.0.1:1080", "https": "127.0.0.1:1080"}
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36'}
# res = requests.get(url, headers=headers, proxies=proxies)
res = requests.get(url, headers=headers)
return res
def find_movies(res):
soup = bs4.BeautifulSoup(res.text, 'html.parser')
# 电影名
movies = []
targets = soup.find_all("div", class_="hd")
for each in targets:
movies.append(each.a.span.text)
# 评分
ranks = []
targets = soup.find_all("span", class_="rating_num")
for each in targets:
ranks.append(' 评分:%s ' % each.text)
# 资料
messages = []
targets = soup.find_all("div", class_="bd")
for each in targets:
try:
messages.append(each.p.text.split('\n')[1].strip() + each.p.text.split('\n')[2].strip())
except:
continue
result = []
length = len(movies)
for i in range(length):
result.append(movies[i] + ranks[i] + messages[i] + '\n')
return result
# 找出一共有多少个页面
def find_depth(res):
soup = bs4.BeautifulSoup(res.text, 'html.parser')
depth = soup.find('span', class_='next').previous_sibling.previous_sibling.text
return int(depth)
def main():
host = "https://movie.douban.com/top250"
res = open_url(host)
depth = find_depth(res)
result = []
for i in range(depth):
url = host + '/?start=' + str(25 * i)
res = open_url(url)
result.extend(find_movies(res))
with open("豆瓣TOP250电影.txt", "w", encoding="utf-8") as f:
for each in result:
f.write(each)
if __name__ == "__main__":
main()
extend(result,item1,item2…..)
这里这个方法主要用来合并,将所有的参数项都合并result中,并返回result
soup.find('span', class_='next').previous_sibling.previous_sibling.text
在文档树中 ,使用 .next_sibling 和 .previous_sibling 属性来查询兄弟节点
P2、2017年中国主要城市房价工资比排行榜
模块档案
安装openpyxl库
pi