了解思路
第一篇爬虫是将获取到的数据以列表的方式保存下来的,后面为了方便数据清洗,我就将他改为字符串形式输出。
列表转换为字符串有这几种方法:
1.使用replace方法
a = ['123条评论']
aa = str(a)
b = aa.replace("条评论",'')
print(b)
2.替换元素
aaa = ['黑色', '红色', '白色', '黑色']
bbb = ['黄色' if i == '黑色' else i for i in aaa]
print(bbb)
3.替换多种元素
aaa = ['黑色', '红色', '白色', '黑色']
ccc = ['黑色', '红色']
bbb = ['黄色' if i in ccc else i for i in aaa]
print(bbb)
4.替换多个元素
aaa = ['黑色', '红色', '白色', '黑色']
ccc = {'黑色': '黄色', '红色': '白色'}
bbb = [ccc[i] if i in ccc else i for i in aaa]
print(bbb)
5.使用正则表达式的sub方法
c = ['¥112.60']
e = str(c)
d = re.sub("¥",'',e)
print(d)
正则表达式的话,去循环遍历的时候他的第一个元素会是[,显然不是我们要表达的效果。
具体的有什么问题可以参考列表转换字符串
最后
所以这里我们使用replace的方法进行替换,先使用xpath获取到列表数据,再进行循环遍历转换为字符串的形式之后使用replace的方法替换字符串中的元素,全部代码如下:
import requests
from lxml import etree
import pymysql
a = input('请输入你想要查找的书籍:')
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0'}
for i in range(1, 10):
url = 'http://search.dangdang.com/?key='+str(a)+'&act=input&page_index=' + str(i)
response = requests.get(url, headers=headers)
text = response.text
html = etree.HTML(text)
quan = html.xpath('//ul[@class="bigimg"]/li')
for x in quan:
name = x.xpath('.//p[@name="title"]/a/@title')
href = x.xpath('.//p[@name="title"]/a/@href')
money1 = x.xpath('.//span[@class="search_now_price"]/text()')
comment1 = x.xpath('.//a[@name="itemlist-review"]/text()')
conn = pymysql.connect('127.0.0.1', 'root', '123456', 'dd', charset='utf8')
cur = conn.cursor()
for a in range(len(name)):
print(name[a])
money = money1[a].replace("¥",'')
comment = comment1[a].replace("条评论",'')
sql = 'insert into bb(title,link,money,comment) VALUES("%s","%s","%s","%s")'
cur.execute(sql % (name[a], href[a], money,comment))
cur.close()
conn.commit()
conn.close()
注意,这里我新建了一个数据库bb来保存,里面的name跟href都用varchar的格式写入,money跟comment都用int的格式写入。
最后,这篇为昨天补的,昨天兼职有点累了就没来的急写,有什么问题欢迎讨论。今日依旧是个卑微打工仔。