爬虫基础之输入关键字提取网页超链接

、功能介绍

功能1:输入某个关键字,访问该关键字相关内容;

功能2:将访问的内容保存为.txt、.html两种格式;

功能3:提取相关访问内容的超链接;

功能4:随机提取一条超链接,进行访问,并将访问页面的内容存储。

二、代码解读

1.导入所需的库

import requests

import re

这部分导入了两个Python库:requests用于发送HTTP请求,re用于正则表达式匹配。

2.headars设置和获取用户输入

headers = {

    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0'

}

它包含了一系列的HTTP头部信息(通常称为“headers”)。这些头部信息主要用于发送HTTP请求时提供一些附加的元数据,如认证信息、自定义标头或特定的服务器配置等。

keyword = input("请输入关键字:")

这里使用input()函数获取用户输入的关键字。

3.发送GET请求到Bing并获取响应:

response = requests.get(f'https://cn.bing.com/search?q={keyword}',headers =headers)

response.encoding = 'utf-8'

pagetext = response.text

使用requests.get()函数发送一个GET请求到Bing的搜索API,并将用户输入的关键字作为查询参数。然后设置响应的编码为'utf-8',并获取响应的内容。

4. 保存页面内容到文件,保存为html文件和txt文件

with open(f'./{keyword}frst.html', 'w', encoding='utf-8') as fp:

    fp.write(pagetext)

print('网页保存结束')

这部分使用with语句打开一个文件,并将Bing搜索结果的内容写入该文件。文件名由用户输入的关键字和“frst.html”组成。完成后,打印“网页保存结束”的消息。

with open(f'./{keyword}frst.html', 'w', encoding='utf-8') as fp:

    fp.write(pagetext)

print('网页保存结束')

这部分使用with语句打开一个文件,并将Bing搜索结果的内容写入该文件。文件名由用户输入的关键字和“frst.txt”组成。完成后,打印“网页保存结束”的消息。

5. 提取第一层访问的超链接:

urls = re.findall(r'target="_blank" href="(.*?)"', pagetext)

使用正则表达式从页面内容中提取所有超链接。这些URLs通常在HTML中的`target="_blank"`属性中。

6. 打印每个超链接:

for i in range(0,len(urls)):

    print('跳转链接',urls[i])

print('第一层超链接提取成功')

print('--'*10)

这段代码的功能是:提取网页中的超链接,并打印出每个超链接,最后输出一个表示成功的消息。其中,使用破折号是为了在输出结果中增加可视化的分隔,使得输出结果更加清晰易读。

7.随机从输入关键字得到的链接中获取的链接进行访问

Import random

j=random.randint(0,len(urls))

print('随机数为:',j)

导入模块:导入Python的random模块,用于生成随机数。使用random.randint(0, len(urls))生成一个随机整数j,用于从urls列表中随机选择一个超链接。

8.获取和保存网页内容

ur = urls[j]

response = requests.get(ur,headers=headers)

response.encoding = 'utf-8'

pagetext1 = response.text

with open(f'./{keyword}gwanye2.html', 'w', encoding='utf-8') as fp:

    fp.write(pagetext1)

with open(f'./{keyword}gwanye2.txt', 'w', encoding='utf-8') as fp:

    fp.write(pagetext1)

从urls列表中使用随机数j选择一个超链接,使用requests.get()方法向该超链接发送GET请求,设置响应的编码为'utf-8',将响应内容(即网页的HTML代码)保存在编码pagetext1中,打开一个新的文件,并使用文件获取内容写入该文件。文件的名称基于变量keyword的值,一个保存为变量keyword的值gwanye2.html格式,另外一个保存为keyword的值gwanye2.txt格式。

9.提取超链接和打印提取的超链接

ur2 = re.findall(r'target="_blank" href="(.*?)"', pagetext1)

print(ur2)

for i in range(0,len(ur2)):

   print('跳转链接:',ur2[i])

print('第二层超链接提取成功')

使用正则表达式从已保存的HTML内容中提取所有带有`target="_blank"`属性的链接。这些链接是那些在新窗口或新标签页中打开的链接。通过循环遍历所有提取的链接,并逐个打印它们。

、演示结果分析

1.按照提示输入关键字为贵州,结果如图所示:

2.提取第一层超链接结果如图所示:

3.提取第二层超链接结果如图所示:

4.爬取后文件的保存结果如下图所示:

5.保存的贵州frist.html文件打开结果如图所示:

6. 保存的贵州frist.txt文件打开结果如图所示:

四、总结

在本次作业中用到了python的一些功能:导入requests和re模块,设置请求头部信息,模拟真实浏览器的请求,用户输入关键字,使用requests库发送HTTP请求,获取Bing搜索结果页面设置响应内容的编码为utf-8,将响应内容保存为html文件和txt文件,使用正则表达式提取页面中的超链接,遍历超链接列表,并打印每个超链接。

在提取的过程中也出现了一些问题,以下是针对于爬取过程中一些问题的处理方法,在爬取的的过程中出现爬取的数据是乱码的,可以使用response.encoding = 'utf-8'去将爬取的字符编码格式改为和原网页一样的格式。爬取的过程中网页拒绝访问,不能获取到自己想要的数据时,可以先设置headers,headers中可以包含User-Agent,Referer、Accept、Cookie等,然后在requests.get()中加入headers则可以解决。

五、代码



import requests
import re
#第一层
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0'
}

keyword = input("请输入关键字:")
response = requests.get(f'https://cn.bing.com/search?q={keyword}',headers =headers )
response.encoding = 'utf-8'
pagetext = response.text

with open(f'./{keyword}frst.html', 'w', encoding='utf-8') as fp:
    fp.write(pagetext)
print('网页1html格式保存结束')

with open(f'./{keyword}frst.txt', 'w', encoding='utf-8') as fp:
    fp.write(pagetext)
print('网页1txt格式保存结束')

urls = re.findall(r'target="_blank" href="(.*?)"', pagetext)


#print(urls)
for i in range(0,len(urls)):
    print('跳转链接:',urls[i])
print('第一层超链接提取成功')
print('--'*60)
#第二层

import random
j=random.randint(0,len(urls))
print('随机数为:j')
ur = urls[j]
response = requests.get(ur,headers=headers)
response.encoding = 'utf-8'
pagetext1 = response.text
with open(f'./{keyword}gwanye2.html', 'w', encoding='utf-8') as fp:
    fp.write(pagetext1)
with open(f'./{keyword}gwanye2.txt', 'w', encoding='utf-8') as fp:
    fp.write(pagetext1)
print('网页2保存结束')

ur2 = re.findall(r'target="_blank" href="(.*?)"', pagetext1)
#print(ur2)
for i in range(0,len(ur2)):
    print('跳转链接:',ur2[i])
print('第二层超链接提取成功')

  • 21
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Python爬虫可以用于从百度新闻获取多个关键字的相关新闻信息。首先,我们需要导入`requests`和`beautifulsoup4`库来发送HTTP请求并解析网页内容。 接下来,我们可以编写一个函数,其参数为关键字列表,用于获取百度新闻中相关关键字的新闻。函数的主要步骤如下: 1. 定义一个空的新闻列表来存储爬取到的新闻信息。 2. 遍历关键字列表,对于每个关键字,构建一个百度新闻的URL链接。 3. 使用`requests`库发送HTTP GET请求,并将响应的内容保存为HTML格式。 4. 使用`beautifulsoup4`库来解析HTML内容,并提取出新闻信息。可以根据需要提取新闻标题、来源、时间等相关信息。 5. 将提取到的新闻信息存储到新闻列表中。 6. 继续遍历下一个关键字,重复上述步骤。 7. 返回新闻列表作为函数的输出。 下面是一个示例代码: ```python import requests from bs4 import BeautifulSoup def get_news(keywords): news_list = [] for keyword in keywords: url = f"https://www.baidu.com/s?rtt=1&bsst=1&cl=2&tn=news&word={keyword}" response = requests.get(url) html_content = response.text soup = BeautifulSoup(html_content, "html.parser") news_items = soup.find_all("div", class_="result") for item in news_items: title = item.find("h3").get_text() source = item.find("span", class_="c-color-gray").get_text() time = item.find("span", class_="c-color-gray2").get_text() news_list.append({ "title": title, "source": source, "time": time }) return news_list ``` 我们可以调用这个函数,传入关键字列表来获取百度新闻中相关的新闻信息。例如: ```python keywords = ["Python", "爬虫", "数据分析"] news = get_news(keywords) for item in news: print(item["title"]) print(item["source"]) print(item["time"]) print() ``` 以上就是使用Python爬虫从百度新闻获取多个关键字相关新闻的一个简单示例。当然,具体的实现方式还可以根据具体需求进行调整和优化。 ### 回答2: Python爬虫是一种利用Python编程语言编写的程序,可以自动化地获取互联网上的信息。百度新闻是百度搜索引擎中的一个板块,提供了各种新闻资讯。多关键字指的是可以通过设置多个关键字来搜索获取更准确的结果。 使用Python爬虫爬取百度新闻多关键字的步骤如下: 1. 导入必要的库,例如requests、bs4等。 2. 设置搜索的URL,即百度新闻的搜索接口,可以在URL中加入关键字等参数。 3. 调用requests库发送HTTP请求,获取返回的网页内容。 4. 使用BeautifulSoup库解析网页内容,提取新闻信息。 5. 遍历解析后的结果,提取所需的信息,例如标题、摘要、日期等。 6. 可以将提取到的信息保存到本地文件或数据库中。 7. 可以在代码中设置循环、分页等功能,获取更多的新闻信息。 8. 可以根据需要对获取的新闻信息进行数据清洗、分析等。 使用Python爬虫爬取百度新闻多关键字可以帮助我们快速获取感兴趣的新闻内容,节省人工搜索的时间和精力。但在进行爬取时,需要遵守相关法律法规,尊重网站的规定,并确保合法安全地使用爬虫技术。 ### 回答3: Python爬虫可以用来抓取百度新闻的多个关键字。首先,我们需要导入必要的库,如requests用于发送HTTP请求,beautifulsoup用于解析网页内容。 然后,我们可以通过构造URL来搜索百度新闻。URL的格式通常包括搜索关键字、起始页码和每页显示的新闻数量等。我们可以使用字符串拼接的方式构造URL,其中搜索关键字可以是多个关键字的组合,通过连接符进行拼接。 接下来,我们可以使用requests库发送get请求获取网页内容。将构造好的URL作为参数传递给requests.get()方法,然后使用response.text来获取网页的HTML源代码。 然后,我们可以使用beautifulsoup库对网页内容进行解析。首先,将获取到的HTML源代码传递给beautifulsoup,并指定解析器类型。然后,可以使用beautifulsoup提供的一些方法,如find_all()来查找包含新闻内容的div元素。 在查找到对应的div元素后,我们可以通过遍历其中的子元素,提取出新闻的标题、发布时间和链接等信息。可以通过调用元素的get_text()方法获取文本内容,以及通过访问元素的属性来获取链接。 最后,可以将获取的新闻信息保存到本地或者进行进一步的处理和分析。可以将信息存储到一个列表或字典中,方便后续的操作。 总而言之,通过使用Python编写爬虫程序,我们可以实现对百度新闻的多个关键字进行搜索,并提取出相关的新闻标题、发布时间和链接等信息。这样就可以方便地获取和处理新闻内容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值