文章目录
为什么用python写 任务需求 以爬某不知名网站为例:准备工作 开始写爬虫 后续 ip池 end为什么用python写
开发效率高,代码简洁,一行代码就可完成请求,100行可以完成一个复杂的爬虫任务; 爬虫对于代码执行效率要求不高,网站IO才是最影响爬虫效率的。如一个网页请求可能需要100ms,数据处理10ms还是1ms影响不大; 非常多优秀的第三方库,如requests,beautifulsoup,selenium等等;任务需求
我现在要获取某人主页的文章的链接,以便我访问,做一些无伤大雅的小事。
以爬某不知名网站为例:准备工作
我们随机选中一个幸运儿:
我们按f12观察前端代码的规律:
我们发现所有的文章都在一个id为common-article-list的盒子里,这样就非常好办了。
我们点开这个盒子,继续观察:
我们发现一个非常明显的规律:
发现a标签里面放着这个幸运儿所有文章的跳转链接,我们找到这个这个a标签的class。
做好了上面的准备工作之后,我们开始写代码。
开始写爬虫
引入的包:
from bs4 import BeautifulSoup
import requests
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
主体代码;
url =('XXXXXXXXX')
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.2.2454.101 Safari/537.36'}
req = requests.get(url,headers =headers )
req.encoding = "utf-8"
soup = BeautifulSoup(req.text,'lxml')
名词解释:
url:是我们爬取网站的目标地址
headers:是解决requests请求反pa的方法之一,相当于我们进去这个网页的服务器本身,假装自己本身在爬取数据。
req:发出访问请求
req.encoding :定义编码,防止解析乱码
soup:已text形式把目标网站源码放入soup里
中部代码
aa=[]
for x in soup.find_all('a',class_="question-link"): #找到目标a标签
link = x.get('href') #提取链接
if link:
# link = "https:/xxxxxxx.com" + link
aa.append(link) #存入列表
print(aa)
解释:
# link = "https://xxxxxx.com" + link
这个的意义在与有的href并不是完整链接,我们需要在后面加上前缀,组成完整的跳转链接。
后续
访问代码:
for i in range(10000):
time.sleep(10)
req = requests.get(url,headers =headers )
# soup = BeautifulSoup(req.text,'lxml')
# rank =soup.select('#blog_rank')
# view = soup.select('.article_manage .link_view .title')
print (i)
这个可以设定时间来不断访问目标网站。
time.sleep(10):设定时间间隔。
当然这里可以换一个随机数。
ip也换为ip池。
ip池
代理的分类:
正向代理:代理客户端获取数据。正向代理是为了保护客户端防止被追究责任。 反向代理:代理服务器提供数据。反向代理是为了保护服务器或负责负载均衡。匿名度:
- 透明:知道是代理ip,也会知道你的真实ip
- 匿名:知道是代理ip,不会知道你的真实ip
- 高匿:不知道是代理ip,不会知道你的真实ip
可以建立一个自己的ip池,这样每隔一段时间换一个代理IP,就算IP被禁止,依然可以换个IP继续爬取。
end
仅记录前面一些小部分,再写这文章可能又发不出去了。