帮忙看下爬虫代码呀...大佬们
大佬没,指教下。。哪里出错了,代码没有报错,但是采集的不是自己想要的内容。真是一看就会,一写就废呀。。import requests
import re
from lxml import etree
class Zw:
def __init__(self):
self.index_url="http://www.zuowen.com/gaozhong/"
def list_href(self,response):
list_str=response.xpath("//div[@class='taglist']/ul/li")
for li in list_str:
list_url=li.xpath("./a[@target='_blank']/@href")[0]
return list_url
def arc_next(self,list_url):
arc_str=requests.get(list_url)
arc_str1 = etree.HTML(arc_str.text)
list_str=arc_str1.xpath("//div[@class='artlist']/div[@class='artlist_l']")
for arc in list_str:
arc_href=arc.xpath("./div[@class='artbox_l']/div[@class='artbox_l_t']/a/@href")[0]
return arc_href
def arc_body(self,arc_href):
html=requests.get(arc_href)
html1 = etree.HTML(html.text)
title=html1.xpath("//h1[@class='h_title']/text()")
#data=re.findall("<p style=\"text-align:center;padding:10px\">20\d{2}-\d{2}-\d{2}.*?</p>",html1)
body=html1.xpath("//div[@class='con_content']/text()")
return title,body
def run(self):
#1 获取封面网址
index_str=requests.get(self.index_url)
response=etree.HTML(index_str.text)
#2 获取列表网址
list_url=self.list_href(response)
#3获取文章网址
arc_href=self.arc_next(list_url)
#4 获取数据
title,body=self.arc_body(arc_href)
#5 保存数据
print(title,body)
if __name__ == "__main__":
zuowen=Zw()
zuowen.run()
这么几行代码,没必要封装成类吧
这样出错不方便调试的 wp231957 发表于 2021-6-4 05:59
这么几行代码,没必要封装成类吧
这样出错不方便调试的
新手 ,照葫芦画瓢。。{:5_109:} 我不是第一个 发表于 2021-6-4 08:51
新手 ,照葫芦画瓢。。
我给你写了一部分,其他的你自己研究研究
这是编辑推荐下面的部分href
import requests
from lxml import etree
url="http://www.zuowen.com/gaozhong/"
headers={'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'}
res=requests.get(url,headers=headers)
res.encoding="gb2312"
tree = etree.HTML(res.text)
data = tree.xpath("//div/div/div/div/ul/li")
for x in range(len(data)):
href=data.xpath(".//a/@href")
print(href) wp231957 发表于 2021-6-4 09:42
我给你写了一部分,其他的你自己研究研究
这是编辑推荐下面的部分href
谢谢大佬,我主要还是想要知道我错在哪里,想学通类和对象的用法。{:5_109:} 以后写项目可能会好点。{:5_95:} 我不是第一个 发表于 2021-6-4 10:02
谢谢大佬,我主要还是想要知道我错在哪里,想学通类和对象的用法。 以后写项目可能会好点。 ...
xpath路径可能不正确 我不是第一个 发表于 2021-6-4 10:02
谢谢大佬,我主要还是想要知道我错在哪里,想学通类和对象的用法。 以后写项目可能会好点。 ...
我的推荐是应该把所有需求都调通了,然后想类化在进行代码整理
你直接这样写,尤其是你可能对网络请求这块不是很熟,那么直接类化,导致你根本不知道是哪里发生了错误 wp231957 发表于 2021-6-4 10:09
我的推荐是应该把所有需求都调通了,然后想类化在进行代码整理
你直接这样写,尤其是你可能对网络请求这 ...
我刚才一个方法一个方法的请求,找到问题了。。哈哈。。
我请求的是列表,不是单个的链接。所以报错了。。还要循环一次。。不过在最后一步还是有问题。 提示。title 是列表。我没看明白。。
import requests
import re
from lxml import etree
class Zw:
def __init__(self):
self.index_url="http://www.zuowen.com/gaozhong/"
self.headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.71 Safari/537.36"}
def list_href(self,response):
index_str=response.xpath("//div[@class='taglist']/ul/li")
for li in index_str:
list_url=li.xpath("./a[@target='_blank']/@href")
return list_url
def arc_next(self,list_url):
for i in list_url:
list_str=requests.get(i,headers=self.headers)
list_str1 = etree.HTML(list_str.text)
list_str2=list_str1.xpath("//div[@class='artlist']/div[@class='artlist_l']")
for arc in list_str2:
arc_href=arc.xpath("./div/div[@class='artbox_l_t']/a/@href")
return arc_href
def arc_body(self,arc_href):
for k in arc_href:
html1=requests.get(k,headers=self.headers)
html = etree.HTML(html1.text)
title=html.xpath("//h1[@class='h_title']/text()")
#data=re.findall("<p style=\"text-align:center;padding:10px\">20\d{2}-\d{2}-\d{2}.*?</p>",html1)
body=html.xpath("//div[@class='con_content']/text()")
return title,body
def run(self):
#1 获取封面网址
index_str=requests.get(self.index_url,headers=self.headers)
response=etree.HTML(index_str.text)
#2 获取列表网址
list_url=self.list_href(response)
#3获取文章网址
arc_href=self.arc_next(list_url)
print(arc_href)
#4 获取数据
title,body=self.arc_body(arc_href)
#5 保存数据
print(title,body)
if __name__ == "__main__":
zuowen=Zw()
zuowen.run()
wp231957 发表于 2021-6-4 10:09
我的推荐是应该把所有需求都调通了,然后想类化在进行代码整理
你直接这样写,尤其是你可能对网络请求这 ...
每次带代码回答,都要审核,有点蛋痛。。{:5_109:} 我不是第一个 发表于 2021-6-4 11:06
每次带代码回答,都要审核,有点蛋痛。。
放在代码框里,会好一些 我不是第一个 发表于 2021-6-4 11:06
每次带代码回答,都要审核,有点蛋痛。。
基本找到问题了,我第二次请求的是列表,不是单个的链接。还要循环一次。。{:5_109:}
后面还有一个问题,提示我title是列表,看不懂。。明明已经 遍历了。贴不了代码 我不是第一个 发表于 2021-6-4 11:10
基本找到问题了,我第二次请求的是列表,不是单个的链接。还要循环一次。。
后面还有一个问题 ...
import requests
import re
from lxml import etree
class Zw:
def __init__(self):
self.index_url="http://www.zuowen.com/gaozhong/"
self.headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.71 Safari/537.36"}
def list_href(self,response):
index_str=response.xpath("//div[@class='taglist']/ul/li")
for li in index_str:
list_url=li.xpath("./a[@target='_blank']/@href")
return list_url
def arc_next(self,list_url):
for i in list_url:
list_str=requests.get(i,headers=self.headers)
list_str1 = etree.HTML(list_str.text)
list_str2=list_str1.xpath("//div[@class='artlist']/div[@class='artlist_l']")
for arc in list_str2:
arc_href=arc.xpath("./div/div[@class='artbox_l_t']/a/@href")
return arc_href
def arc_body(self,arc_href):
for k in arc_href:
html1=requests.get(k,headers=self.headers)
html = etree.HTML(html1.text)
title=html.xpath("//h1[@class='h_title']/text()")
#data=re.findall("<p style=\"text-align:center;padding:10px\">20\d{2}-\d{2}-\d{2}.*?</p>",html1)
body=html.xpath("//div[@class='con_content']/text()")
return title,body
def run(self):
#1 获取封面网址
index_str=requests.get(self.index_url,headers=self.headers)
response=etree.HTML(index_str.text)
#2 获取列表网址
list_url=self.list_href(response)
#3获取文章网址
arc_href=self.arc_next(list_url)
print(arc_href)
#4 获取数据
title,body=self.arc_body(arc_href)
#5 保存数据
print(title,body)
if __name__ == "__main__":
zuowen=Zw()
zuowen.run()
页:
[1]