Python网络爬虫
Urllib
urllib.request.urlopen
返回一个response
1 | resp = urllib.request.urlopen("http://www.baidu.com") |
urllib.request.urlopen("...").read()
返回网页源代码
==但是有一些网页禁止爬虫访问,这个时候就要做浏览器伪装==
1 | web = "https://www.bilibili.com/" |
header用页面审查元素的网络的请求头的原始头里查看
如果url里有中文
web = "https://www.bilibili.com/" text = quote("1加1",encoding='GBK') baidu = "http://www.baidu.com/s?wd="+text+"&lm=1"
1
2
3
4
5
6
7
8
9
10
11
12
- `quote`来自`urllib.parse`,能把中文转码
- 然后`/s?wd=`是百度搜索时要加的东西
- 后面的`&lm=1`要加(`&lm=0`也行),不然会进入安全认证(我暂时还不知道为什么)
## bs4.BeautifulSoup
- `BeautifulSoup`
```python
soup = BeautifulSoup(resp, features='lxml')
soup = BeautifulSoup(resp, features='html.parser')
resp就是上面的resp,featrues就是网页的解释器
1 | print(soup.title) |
soup.find('a')
会找到tag
a第一次出现的地方,然后把这个包装成一个tag对象soup.find_all('a')
会找到所有的tag
a然后会返回一个可迭代对象,对象中的每一个元素都是一个tag对象for i in img: print(i) print(i.get('src')) #得到src属性的东西 print(i['src']) #与上面一样
- 用正则表达式把src中含jpg的全部提取出来1
2
3
- ```python
print(soup.find_all("img", {"src": re.compile('.*?\.jpg')}))
图片的懒加载
暂时还解决不了
requests板块
get
get
用于请求目标网站的内容
1 | response = requests.get('http://www.baidu.com') |
Session()
一般cookie数据保存在客户端,session数据保存在服务器端
使用
requests.Session()
的时候,当前这个会话对象会保留之前所有的cookie数据,而用其他的命令每次都是新建立一个请求,比如get一个新的,post一个新的s = requests.Session() response = s.get(url)