爬取百度百科1000个页面数据

代码实现:https://github.com/Tei320/DailyCode/tree/master/baike_spider

 

自己遇到的问题以及处理方法:

Q1:response=urlib.request.urlopen() response.read()多次read为空b''

A1:read()后,原response会被清空

Q2:使用Python写文件的时候,或者将网络数据流写入到本地文件的时候,大部分情况下会遇到:UnicodeEncodeError: ‘gbk’ codec can’t encode character ‘\xa0’ in position … 这个问题

A2:需要注意网页数据流编码,目标文件编码和python脚本文件本身的编码。

以下文章转载来自:https://blog.csdn.net/qq_38008452/article/details/80423436

将网络数据流写入文件时时,我们会遇到几个编码:

    1: #encoding=’XXX’ 这里(也就是python文件第一行的内容)的编码是指该python脚本文件本身的编码,无关紧要。只要XXX和文件本身的编码相同就行了。 比如notepad++ “格式”菜单里面里可以设置各种编码,这时需要保证该菜单里设置的编码和encoding XXX相同就行了,不同的话会报错

    2:网络数据流的编码 比如获取网页,那么网络数据流的编码就是网页的编码。需要使用decode解码成unicode编码。

    3:目标文件的编码 要将网络数据流的编码写入到新文件,那么我么需要指定新文件的编码。写文件代码如:

f.write(txt)


,那么txt是一个字符串,它是通过decode解码过的字符串。关键点就要来了:目标文件的编码是导致标题所指问题的罪魁祸首。如果我们打开一个文件:

 f = open("out.html","w")


,在windows下面,新文件的默认编码是gbk,这样的话,python解释器会用gbk编码去解析我们的网络数据流txt,然而txt此时已经是decode过的unicode编码,这样的话就会导致解析不了,出现上述问题。 解决的办法就是,改变目标文件的编码:

f = open("out.html","w",encoding='utf-8')

 

。这样,问题将不复存在。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python 是一种强大的编程语言,可以用来爬取网页数据并进行数据处理。本文将介绍如何使用 Python 爬取百度百科数据并构建三元组。 首先,我们需要安装 Python 的爬虫库 BeautifulSoup 和 requests。可以使用以下命令来安装这两个库: ```python pip install BeautifulSoup requests ``` 接下来,我们需要使用 requests 库发送 HTTP 请求,并使用 BeautifulSoup 库解析 HTML 页面。以下是一个简单的示例代码: ```python import requests from bs4 import BeautifulSoup url = 'https://baike.baidu.com/item/Python/407313' # 发送 HTTP 请求并获取网页内容 response = requests.get(url) content = response.text # 使用 BeautifulSoup 解析网页内容 soup = BeautifulSoup(content, 'html.parser') # 定位到百度百科词条正文内容 content_div = soup.find('div', {'class': 'lemma-summary'}) paragraphs = content_div.find_all('div', {'class': 'para'}) # 构建三元组 triples = [] for para in paragraphs: subject = 'Python' predicate = '介绍' object = para.text.strip() triple = (subject, predicate, object) triples.append(triple) # 打印三元组 for triple in triples: print(triple) ``` 在上述代码中,我们首先指定要爬取百度百科页面的 URL,并使用 requests 库发送 HTTP 请求获取网页内容。然后,我们使用 BeautifulSoup 库解析网页内容,并找到百度百科词条的正文内容。最后,我们遍历每个正文内容段落,构建三元组,并打印出来。 以上就是使用 Python 爬取百度百科数据构建三元组的简单示例。希望对你有帮助! ### 回答2: Python爬虫是一种通过代码自动化访问网页并提取信息的技术。在这个任务中,我们可以使用Python编写爬虫代码,从百度百科网页上提取数据并构建三元组。 首先,我们需要导入必要的Python库,例如requests和BeautifulSoup。使用requests库可以发送HTTP请求获取网页的源代码,而BeautifulSoup库可以方便地解析和提取网页中的数据。 接下来,我们可以使用requests库发送GET请求,将百度百科的URL作为参数传递给requests库。通过访问URL并获取到的网页源代码,我们可以使用BeautifulSoup库解析网页数据。 在百度百科网页中,通常会包含实体名称、实体定义和相关信息等内容。我们可以使用BeautifulSoup库根据HTML标签的属性和类名来定位到相关的标签位置,并提取所需的数据。 例如,如果我们想要构建一个以"实体名称-实体定义-相关信息"为三元组的数据结构,我们可以使用BeautifulSoup库定位到实体名称、实体定义和相关信息所对应的HTML标签,并将它们的内容提取出来。 最后,我们可以将提取到的数据保存到相应的数据结构中,例如列表和字典中,或者将其写入到文件中,以便后续的数据处理和分析。 总结起来,使用Python爬虫技术,我们可以很方便地从百度百科网页上提取数据并构建三元组。这个过程主要包括发送HTTP请求、解析网页数据,并将所需的数据提取并保存到相应的数据结构中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值