Advertisement

python 爬取网页 通知消息_Python爬取网页信息

阅读量:

Python爬取网页信息的步骤

我们采用该网站(https://nameberry.com/)作为数据源,并提取每个用户的评论信息和详细记录时间。

1、确认网址

在浏览器中输入初始网址,逐层查找链接,直到找到需要获取的内容。

当访问页面时,在目标位置进行内容定位操作之前,请您执行以下步骤:首先右键点击菜单栏中的某个项目,在弹出的对话框中选择"检查"选项;随后,在页面展示的具体内容部分进行操作。

提示:代码显示的方法取决于浏览器类型,在部分情况下(如360浏览器等),用户可能无法直接查看原始代码内容。

步骤图:

1)首页,获取A~Z的页面链接

2)名字链接页,获取每个字母中的名字链接(存在翻页情况)

3)名字内容页,获取每个名字的评论信息

2、编写测试代码

在获取网页信息的过程中,在此过程中采用自动化的方式建立所有字母间的联系,并将这些联系存储在一个二维数组中

1 defget_url1():2 urls=[]3 #A,'B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'

4 a=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']

#自动生成A至Z的链接
for each item in a:
构建一个包含所有 URL 的列表 urls.
使用 pd.DataFrame 将 urls 转换为 DataFrame 命名为 dp.
dp = pd.DataFrame(urls)
dp.to_csv("A至Z链接列表.csv", mode="append", encoding='utf-8-sig')

循环嵌套用于遍历每个字母链接,并调用获取对应页面的函数;具体实现为:嵌套循环结构:外层循环遍历urls列表中的每个元素j;内层调用get_pages_Html(j)函数以获取对应页面的内容;将处理结果返回给外层调用处。

提取名称链接;通过分析网页源码确定包含名称的标签;开发代码;采用直接存储的方式存储这些名称;便于后续对名称进行评论内容的获取。

1 #获取页数

def get_pages_Html(url1):
req = requests.get(url1)
soup = BeautifulSoup(req.text, "html.parser")
# 异常处理 用于解决页面不存在多页问题 使用正则表达式提取页面数量

6 begin:7 last page的位置信息来自...['href']的位置。
8 str1=将last page转换为字符串并存储在变量中。
9 b=通过查找所有正整数字符来解析str1中的内容。
10 for each page inb:
11 num=取出当前页码值。
12 except:处理异常情况
13 num=设置为默认值

14 get_pages(num,url1)15 returnnum16

该函数用于从指定URL获取指定数量页码的数据,默认从第一页开始收集数据直到指定页数上限。
首先创建一个空列表变量pages用于存储爬取的数据。
然后通过循环遍历k从范围生成的数据,
在每次循环中将URL拼接页码参数添加到pages列表中。
最后利用pandas库将收集到的dataframe对象导出为逗号分隔值格式文件,
并以追加的方式保存在NUM_pages_1.csv文件中。
#函数调用

24 for l inpages:25 parse_HTML2(l)26 returnpages27

28

29 #名字的链接,根据网页源码的标签,确定名字链接的位置

该函数用于解析HTML内容并生成相应的数据框以存储错误信息。
31 try:
32 req = requests.get(url2)
33 req.encoding = req.apparent_encoding
34 soup = BeautifulSoup(req.text, "html.parser")
35 except:
36 dp = pd.DataFrame({url2: []})
37 dp.to_csv("Error_pages_1.csv", mode="a", encoding='utf-8-sig')
name_data_l = []
error = []
li_list = soup.find_all('li', class_="Listing-name pt-15 pb-15 bdb-gray-light w-100pct flex border-highlight")
try:
for li in li_list:
nameList = li.find('a', class_='flex-1')['href']
name_data_l.append(f"https://nameberry.com/{nameList}")
time.sleep(1)
cun(name_data_l, "Name_List_1")
except:
dp = pd.DataFrame({name_data_l: []})
dp.to_csv("Error_Name_List_1.csv", mode="a", encoding='utf-8-sig')
# cun(url2, "Error_link_Q")

51 #dp=pd.DataFrame(name_data_l)

52 #dp.to_csv("Name_List.csv",mode="a",encoding='utf_8_sig')

53 #for i in name_data_l:

54 #parse_HTML3(i)

55 returnname_data_l56

3)获取名字评论的内容,采用字典形式写入文件

1 #名字里的内容

defparse_HTML3(url3):
count=0
req=requests.get(url3)
req.encoding=req.apparent_encoding
soup=BeautifulSoup(req.text)
error=[]
try:
Name=soup.find('h1',class_='first-header').find("a").get_text().replace(",","").replace("\n","")
except Exception as e:
error.append(url3)
cun(error,"Error Link Comment")
li_list=soup.find_all('div',class_='comment')
for li in li_list:
Title=li.find('h4').get_text().replace(",","").replace("\n","")
Time=li.find('p',class_='meta').get_text().replace(",","").replace("\n","")
Comments=li.find('div',class_='comment-text').get_text().replace(",","").replace("\n","")
dic2={
"Name":Name,
"Title":Title,
"Time":Time,
"Comments":Comments
}
time.sleep(1)
count=count+1

26 save_to_csv(dic2,"Name_data_comment")27 print(count)28 return 1

3、测试代码

在代码完成之后,在进行后续操作时需明确具体步骤:首先按照顺序执行功能模块间的交互;其次,在获取链接的过程中采用嵌套的方式处理;接着,在处理具体内容时应确保数据完整性;此外,在提取文件中的名字链接时需注意路径结构;最后,在处理名字的评论内容时应避免重复计算以提高效率

如图:

2)测试结果

4、小结

在执行网页内容抓取任务时,请先对目标页面的原始代码进行分析,并完成编码与调试工作。同时必须遵守网站提供的爬虫协议(如有违反规定将导致账号受限)。当需要处理大量数据时,请考虑将数据获取过程划分为多个阶段性的请求(以便分阶段完成整个数据获取的任务)。

总之,爬虫有风险,测试需谨慎!!!

全部评论 (0)

还没有任何评论哟~