您的位置:首页 > 编程语言 > Python开发

xpath的使用方法以及python爬取数据的保存

2017-08-04 14:45 801 查看
前面写了几篇关于自己爬虫时的进度以及遇到的问题,今天系统的爬取了一个网站之后又对爬虫方法有了更好的认识,所以今天我会尽量用明晰的语言来给大家介绍这些方法。

首先说明下我要爬取的内容:http://www.zbj.com/appdingzhikaifa/sq10054601.html          打开这个网址会有很多店铺,我的第一步就是爬取这个网址中店铺所对应的公司名,代码在我前面的文章中有提到,这块就不展示了。然后  http://www.qichacha.com  我会在这个网站搜索这些公司名,你会发现会有很多同名不同地区的公司,而我接下来就是需要爬下这些所有公司名的信息。

我觉得对于任何一个页面的信息爬取的方法无非Beautifulsoup或者webdriver 的方法,我自己感觉我没有太弄懂beautifulsoup,所以有时还不是很熟练,接下来我就重点介绍webdriver中的xpath。

import selenium.webdriver as webdriver            #webdriverd 所需要的库

>>> driver=webdriver.Chrome()                     #打开浏览器                         ,这里建议大家使用谷歌浏览器,根据自己对应电脑版本去官网下载对应版本就好,当然还要安装一个webdriver,百度同样可以搜索下载到,然后还有环境的配置等。。。(好像走题了)

results = driver.find_elements_by_xpath("//div[@class='witkey-name j-witkey-name']/a")          #重点是这一句代码,//表示相对路径,/表示绝对路径,其中你找到你所需要信息的模块,比如‘div class’。而后面的a就是你找到的模块中的带有a的text文字。查找到后print就可以

至于怎么转到http://www.qichacha.com 用这个网址搜索到的公司内容,同样的,python中网址是可以相加的,设立一个base_url就可以。

爬下你的内容之后就是保存了,我看了很多方法学习到的:with open ('1,txt','wb') as f:         f.write()

中间的1.txt你也可以改成xlsx格式等。保存路径默认在你的python文件夹中。当然你在使用with open 时需要加上这三行代码:

import sys

>>> reload(sys)

>>> sys.setdefaultencoding('utf-8')

我这里还有一个问题没有解决就是f.write写时只会保存出来最后一页信息,貌似会覆盖前面的信息,大家有解决的方法可以和我探讨。

最后附上代码"

import urllib,sys

import selenium.webdriver as webdriver

import sys

>>> reload(sys)

>>> sys.setdefaultencoding('utf-8')

>>> driver=webdriver.Chrome()

>>> driver.get('http://www.zbj.com/appdingzhikaifa/sq10054601.html')

>>> results = driver.find_elements_by_xpath("//div[@class='witkey-name j-witkey-name']/a")

>>> res=[]

>>> for result in results:
if result.text not in res:
res.append(result.text)

a=[]

>>> for r in res:
s=r.encode("gbk")
base_url='http://www.qichacha.com/search?key='
a.appendbase_url+urllib.quote(s.decode(sys.stdin.encoding).encode('utf8')))

>>> print a

>>> for r in a:
driver.get(r)
results=driver.find_elements_by_xpath("//p[@class='m-t-xs']")
for result in results:
print result.text

                  #接下来就是转码问题

 

for r in a:
driver.get(r)
result1=driver.find_elements_by_xpath("//a[@class='ma_h1']")
for result in result1:
print result.text

for r in a:
driver.get(r)
result1=driver.find_elements_by_xpath("//a[@class='ma_h1']")

        with open('1.txt','wb') as f:

             for result in result1:
 f.write(result)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐