当前位置:AIGC资讯 > 数据采集 > 正文

爬虫实战1——获取某主页的所有跳转链接

文章目录

为什么用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

仅记录前面一些小部分,再写这文章可能又发不出去了。

更新时间 2023-11-08