我的第一个简单python爬虫
利用xpath解析数据,用openpyxl存储数据
明确目标:挑战杯网址
找到想要的数据:项目名称+项目简介
解析开始:一开始我是用bs4但是发现数据提取得太杂乱,而且还有我不需要的字符串
解决方法:利用xpath来解析
一开始直接按照官宣:
from lxml import etree#结果etree下面爆红
然后查资料问老师就:
from lxml import html#从html间接调用etree
import requests
res = requests.get(url)
tree = res.text#将html代码存入tree
tree = etree.HTML(tree)#调用etree来解析html
xpath_1 = '/html/body/div[2]/div/div[2]/div[2]/div/p/text()'#xpath语法用来提取数据
xpath_2 = '/html/body/div[2]/div/div[2]/div[2]/div/div/p[1]/a/text()'
print(xpath_1)
print(xpath_2)
解析到数据后发现只有一条,因为html中不同的xpath地址,那么就意味着上面[ ]中的数字可以修改
所以加入一个循环语句和一个拼接语法用来修改[ ]中的数据
for i in range(2,4):
xpath_1 = '/html/body/div[2]/div/div[2]/div[{}]/div/p/text()'.format(i)
xpath_2 = '/html/body/div[2]/div/div[2]/div[{}]/div/div/p[1]/a/text()'.format(i)
当然解析到了数据后还需要将数据存起来,在这里就需要用到openpyxl
最后写成完整版:
from lxml import html
import requests
import openpyxl
wb = openpyxl.Workbook()
sheet = wb.active
etree = html.etree
url_1 = 'http://www.tiaozhanbei.net/project/search/?category=&pro_type=&province_id=&keyword=%E6%99%BA%E8%83%BD&small_category='
url_list = []
url_list.append(url_1)
for x in range(30):
url_2 = 'http://www.tiaozhanbei.net/project/search/?page={}&category=&province_id=&pro_type=&keyword=%E6%99%BA%E8%83%BD&small_category='.format(x)
url_list.append(url_2)
for url in url_list:
res = requests.get(url)
tree = res.text
tree = etree.HTML(tree)
lists = []
for i in range(2,12):
xpath_1 = '/html/body/div[2]/div/div[2]/div[{}]/div/p/text()'.format(i)
xpath_2 = '/html/body/div[2]/div/div[2]/div[{}]/div/div/p[1]/a/text()'.format(i)
# print(xpath_2)
title = tree.xpath(xpath_1)
content = tree.xpath(xpath_2)
lists.append(content)
lists.append(title)
print(lists)
for list in lists:
sheet.append(list)
wb.save('shuju.xlsx')
wb.close()
小结
目的:这个爬虫是完全我自己写的第一个爬虫用来爬取挑战杯的一些发明简介。
感悟:些这个爬虫时我遇到了两个问题在这里我将他们记录下来为了证明一种学习态度,
边写代码要变做记录,因为我还是一种只有理论没有时间的阶段!!!