首页 > 编程知识 正文

京东商品数据抓取,python爬取京东手机数据

时间:2023-05-03 08:52:34 阅读:112910 作者:3939

Python网络爬虫所需的模块本次爬虫程序所需的模块如下。

requests、BeautifulSoup、chardet、re、json和csv

首先,我将介绍这些模块的用途

1.request模块requests模块允许您获取要访问的网页的html内容。 使用requests.get(URL ),可以返回到相应网页的连接,并调用. text或. content获取相应网页的html内容。 其中. text是以字符串形式返回web内容, content是以二进制字节形式返回web内容,两者有不同的用处。 例如,以. text返回的一些web内容可能是编码格式错误导致的乱码问题。

代码示例:

GODS_content=requests.get(URL ).content返回

class 'bytes '针对. text返回class 'str '

为什么在这里使用. content,是因为在这里调用. text时会发生汉字乱码。

2 .对于2.chardetweb页面乱码,首先需要在网页源代码中观察网页设计者创建网站时使用的编码格式。 第一种方式很简单,一般出现在源代码的开头。 例如

meta http-equiv=' content-type ' content=' text/html; charset=utf-8 '/meta http-equiv=' content-type ' content=' text/html; 可见,charset=gbk' /第页的编码格式为utf-8格式编码,第二页的编码格式为gbk编码。 分析utf-8编码格式的网页时,缺省情况下以gbk格式进行分析会出现乱码问题。 在这种情况下,必须调用. decode (或. encode ) )

有关几种编码格式的资料,请访问http://blog.csdn.net/fenn vde 007/article/details/20769179

第二种代码的方法是利用chardet模块。 使用chardet的detect ()函数获取网页的编码格式。 例如

status=chardet.detect (goods _ content ) #判断为网页编码格式会返回

从{'encoding': 'utf-8 '、' confidence': 0.99、' language':'}encoding属性中,网页编码格式为utf-8模式

因此,在这里,为了解决乱码问题。 对爬取的内容调用. decode(utf-8 )进行格式转换

content _ encode=goods _ content.decode (utf-8 ) )将通过滚动获取的二进制网络内容解码为utf-8编码格式的3.BeautifulSoup模块

有两种方法可以使用BeautifulSoup搜索web节点。 第一种是通过.运算直接检索

例如soup.a soup.title

第二,使用find (和find_all函数进行搜索

find ) )函数只返回要搜索的第一个节点标签类型

find_all ()函数以列表形式返回要搜索的所有节点标签的类型

函数的参数可以是要搜索的节点标签类型。 范例

p_label=soup.find_all('p '还可以使用attrs参数查找指定属性的对应标记。 范例

p_label=soup.find(p,attrs ) class (: ) UI-page-s ) )爬虫主要使用BeautifulSoup返回的分析树,根据需要在网页上的

例如:

#对应的id标签j_Goodslist=soup.find_all(div ), attrs={'id': 'J_goodsList'} )0) GL_I_wrap=)寻找attrs={ ' class ' : ' GL-I-wrap ' } forlap } 查找所有属性class为“GL-I-wrap”的div节点,遍历返回的div节点列表,遍历过程中仅获取div下的a标签,获取a标签的属性值href。 获取与商品对应的链接网站。

最后要指明利用这样访问节点的方式进行检索不是不可以,

在工程量减小的时候可以实现,但是当网页比较复杂,节点标签较多的时候,你很难将你需要的内容直接对应到某一个或某几个节点,这个时候利用xPath或CSS的模式进行检索,再利用浏览器的检查(F12),两者可以很方便的生成你想获取信息的xPath或CSS路径。这里暂时不介绍这方面的知识。

4.re正则表达式模块

正则表达式对于检索文档信息、对字符串内容进行检索,特别是对于文本的处理时是十分必要且效率很高的。相关资料也很多,可以参考Python正则表达式指南
对于本文的爬虫,利用re模块是为了方便的获取对于商品的信息,获取这些信息的原因是为了后面在爬取评论时,对于京东评论网页构建Query String Parameters里的参数。这里只贴上代码,示例正则表达式模块的使用,对于参数的用处放在后面再将
首先构建正则表达式

#利用正则表达式匹配页面所需信息re_skuId = re.compile(r'skuId=d+') #获取商品的skuId值re_https = re.compile(r'https:') #对网站格式的处理rex=re.compile(r'w+[(]{1}(.*)[)]{1}') #提取出JSON格式

应用

skuId = re_skuId.search(page_text).group() #获取sku的值productId = re.search(r'd+', skuId).group() #获取product的值 cont = rex.findall(t)[0] #将爬取下来的内容转化成可以被json解析的字典格式 5.json和csv模块

这两部分是格式转换的模块,json是为了将对爬取下来的评论网页解析成Python方便处理的字典格式,json有.load()和.loads(),dump()和dumps()。loads()是将json格式转换成Python方便处理的字典格式。而dumps()方法是将Python的字典格式转换成json格式。
csv模块在本文的爬虫中是为将爬取下来的评论以csv文件的格式保存。
代码如下:

cont = rex.findall(t)[0] #对网页内容进行清理,获取json格式的部分con = json.loads(cont) #将爬取下来的内容转化成可以被json解析的字典格式 def Insert_To_Csv(csv_file, content): with open(csv_file, 'w') as f: title = ['ItemName', 'Time', 'Comment','Score',"Assess"] #CSV文件的标题 spamwriter = csv.writer(f, delimiter = ',') #','分割符 spamwriter.writerow(title) #写入标题 for key, value in content.items(): for page in value: #先遍历每一页 for comm in page: #再遍历每一页下的评论 csv_list = comm csv_list.insert(0,key) spamwriter.writerow(csv_list)

相关资料可以参考官方Documents csv

这些是进行网络爬虫大致需要的模块,后续还有其他比较重要的模块再继续进行补充,接下来再对用Python爬取京东评论的思路和方法进行介绍。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。