【Python学习记录】极客大学,7天入门Python爬虫实战营

【Python学习记录】极客大学,7天入门Python爬虫实战营

该篇非广告文

但可能是流水文

一点点记录仅供参考

pic_001.jpg

7 天入门 Python 爬虫实战 

Python 训练营·小课 

尹会生 金山西山居运维总监 


常见网络库精讲 

HTTP、HTML 基础介绍 


爬虫项目实战 

班主任带班学习


怎么说呢,现今的推培训课程,都是采用微信群,打卡的形式来展开

以免费的形式(课程已订购)或者部分免费(限时9.9)的形式来获取学习群


总而言之免费是最贵的,想要快速,省事,省时省力,都是妄想!!


以下是流水账:

总共是7天,实际上是6天,最后一天是总结(结课),填表,搜集精准数据


第一天:

Day 1 视频观看:

1)网页数据的采集与urllib库

2)网页常见的两种请求方式get和post

3)3HTTP头部信息的模拟


Day 1 作业:

比较 urllib 和 requests 库的用法差异,通过 random() 方法实现每次提交请求时增加随机的 user-agent HTTP 头部信息。


参考资料:

urllib:

https://docs.python.org/zh-cn/3/library/urllib.html

random():

https://docs.python.org/zh-cn/3/library/random.html


附参考代码:

import random #引入 random 库
import urllib.request #引入 urllib.request 库
import requests

#ua列表
ua_list=[
    'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36',
    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36',
    'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36 OPR/37.0.2178.31',
    'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0',
]

url="https://time.geekbang.org/" #  目标网址

#借助build_opener和addheaders完成
head=('User-Agent',random.choice(ua_list)) #注意:在urllib 中headers是元组
opener=urllib.request.build_opener()
opener.addheaders=[head]
response=opener.open(url)
print(response.read().decode('utf-8'))

headers={'User-Agent':random.choice(ua_list)} #随机生成协议头
"""random.choice(seq)
从非空序列 seq 返回一个随机元素。如果 seq 为空,则引发 IndexError。"""
req=requests.get(url,headers=headers)
print(req)


第二天:

Day 2 视频观看:

4)requests库的基本使用

5)结合正则表达式爬取图片链接


Day 2 作业:

使用 requests 库配合正则表达式,获取豆瓣读书 book.douban.com/top250 排名最高的25本书的名字。


参考资料:

re:

https://docs.python.org/zh-cn/3/library/re.html

requests:

https://2.python-requests.org//zh_CN/latest/user/quickstart.html


附参考代码:

import requests   #引入requests库
import re         #引入正则re库
import random     #引入random库

#ua列表
ua_list=[
    'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36',
    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36',
    'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36 OPR/37.0.2178.31',
    'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0',
]
headers={'User-Agent':random.choice(ua_list)} #随机生成协议头
url="https://book.douban.com/top250"
response=requests.get(url,headers=headers).content.decode('utf-8')
bookeze=r'<a href=".+?" onclick=.+?; title="(.+?)"'
books=re.findall(bookeze,response,re.S)
print(books)
for book in books:
    print(book)


第三天:

‍Day 3 视频观看:

6)Beautiful Soup的安装和使用


Day 3 作业:

1. 使用 Beautiful Soup 筛选器代替正则表达式进行图书名字筛选。

2. 通过搜索引擎了解 Xpath 的功能并比较和 Beautiful Soup 的差异。


参考资料:

Beautiful Soup:

https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html

XPath:

https://developer.mozilla.org/zh-CN/docs/Web/XPath


附参考代码:

import requests                  #引入 requests 库
from bs4 import BeautifulSoup    #引入 BeautifulSoup 库
import random     #引入random库

#ua列表
ua_list=[
    'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36',
    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36',
    'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36 OPR/37.0.2178.31',
    'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0',
]
headers={'User-Agent':random.choice(ua_list)} #随机生成协议头
url="https://book.douban.com/top250"
response=requests.get(url,headers=headers).content.decode('utf-8')
soup=BeautifulSoup(response,'html.parser') #bs4解析网页
divs=soup.find('div',class_="article").find_all('div',class_="pl2")
for div in divs:
    title=div.find('a').get_text()
    title=title.replace('\n','').replace(' ', '')   #去除格式,换行,空格
    print(title)


第四天:

‍Day 4 视频观看:

7)使用爬虫爬取新闻网站


Day 4 作业:

使用 requests 和 XPath 获取豆瓣 top250 图书名字和作者,保存至本地文件。


参考资料:

Python I/O:

https://docs.python.org/zh-cn/3/library/io.html


附参考代码:

import requests                  #引入 requests 库
from lxml import etree           #引入etree库
import random     #引入random库

#ua列表
ua_list=[
    'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36',
    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36',
    'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36 OPR/37.0.2178.31',
    'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0',
]
headers={'User-Agent':random.choice(ua_list)} #随机生成协议头
url="https://book.douban.com/top250"
response=requests.get(url,headers=headers).content.decode('utf-8')
req=etree.HTML(response)  #etree解析网页
titles=req.xpath('//tr[@class="item"]/td[2]/div[1]/a/@title') #获取 a 节点 title 属性 文本内容
for title in titles:
    print(title)
    with open("book.txt",'a+',encoding='utf-8') as f:  # 以 utf-8 编码 追加 a+ 的形式 写入 book.txt 中
        f.write('%s%s'%(title,'\n'))


第五天:

‍Day 5 视频观看:

8)使用爬虫爬取图片链接并下载图片


Day 5 作业:

学习异常处理对网络超时、文件不存在等异常进行捕获并处理。


参考资料:

错误和异常:

https://docs.python.org/zh-cn/3/tutorial/errors.html


附参考代码:

import requests                  #引入 requests 库
from bs4 import BeautifulSoup    #引入 BeautifulSoup 库
import random     #引入 random 库
from requests.adapters import HTTPAdapter #引入 HTTPAdapter 库

#ua列表
ua_list=[
    'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36',
    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36',
    'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36 OPR/37.0.2178.31',
    'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0',
]
headers={'User-Agent':random.choice(ua_list)} #随机生成协议头
url="https://book.douban.com/top250"

"""
python requests 配置超时及重试次数
max_retries 为最大重试次数,重试3次,加上最初的一次请求,一共是4次
"""
s = requests.Session()
s.mount('http://', HTTPAdapter(max_retries=3))
s.mount('https://', HTTPAdapter(max_retries=3))

try:
    response=s.get(url,headers=headers,timeout=5).content.decode('utf-8')
except requests.exceptions.RequestException as e:
    print(e)

soup=BeautifulSoup(response,'html.parser') #bs4解析网页
divs=soup.find('div',class_="article").find_all('div',class_="pl2")
for div in divs:
    title=div.find('a').get_text()
    title=title.replace('\n','').replace(' ', '')   #去除格式,换行,空格
    print(title)


第六天:

Day 6 作业:

通过豆瓣 Top250 的 <a> 标签,请求图书详细页,获取前 10 本书的短评,并保存至本地文件。


参考资料:

HTML 超链接:

https://developer.mozilla.org/zh-CN/docs/Learn/HTML/Introduction_to_HTML/Creating_hyperlinks


附参考代码:

import requests                  #引入 requests 库
from bs4 import BeautifulSoup    #引入 BeautifulSoup 库
import random     #引入random库

#ua列表
ua_list=[
    'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36',
    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36',
    'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36 OPR/37.0.2178.31',
    'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0',
]
headers={'User-Agent':random.choice(ua_list)} #随机生成协议头
url="https://book.douban.com/top250"
response=requests.get(url,headers=headers).content.decode('utf-8')
soup=BeautifulSoup(response,'html.parser') #bs4解析网页
divs=soup.find('div',class_="article").find_all('div',class_="pl2")
i=1
for div in divs[:10]: # 切片 获取前十本节点内容
    href=div.find('a')['href']
    print(href)
    book_response = requests.get(href, headers=headers).content.decode('utf-8') #访问书籍详情页
    book_soup = BeautifulSoup(book_response, 'html.parser')  # bs4解析网页
    h1=book_soup.find('div',id="wrapper").find('h1').get_text()  #获取标题
    h1=h1.replace('\n','')
    h1='Top%d:%s'%(i,h1)
    print(h1)
    comment_infos=''
    lis=book_soup.find('div',id="comments").find('ul').find_all('li')
    for li in lis:
        author=li.find('span',class_="comment-info").find('a').get_text()
        conment=li.find('p',class_="comment-content").get_text()
        comment_info='%s%s%s%s%s%s'%('author:','\n',author,'\n','conment:',conment)
        print(comment_info)
        comment_infos='%s%s%s'%(comment_infos,'\n',comment_info)
    print(comment_infos)
    with open('top10_book.txt','a+',encoding='utf-8') as f:
        f.write('%s%s%s%s'%(h1,'\n',comment_infos,'\n'))
    i=i+1


个人总结:

1.不太适合零基础学习,起码需要点python语法基础

当然除非你有极大学习毅力以及脱产学习和足够多的时间研究!

python语法基础的学习其实已经是劝退了大部分人!


2.小课群群员广泛,大部分在职人员几乎没有时间看视频课程以及讨论

适合时间多,自主学习能力强的人入门学习,尤其是在校学生!


3.已经入门python爬虫的没必要再学习该小课!


总而言之

学习需要靠自己,至于培训,见仁见智!!

想要快速,省事,省时省力,都是妄想!!