|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
我采集了一个网站的封面页,获取了多个列表页
然后获取的文章是多个列表页,如何把这些列表合并为一个
请求频道页地址 A表示【频道页地址】
A
获取多个列表页 列表中的字母表示独立的 【列表页地址】
[a,b,c,d]
请求列表页获取文章页面;列表里面的数字代表的是独立的 【文章地址】
文章列表a
[1,2,3,4,5,6,7,8,9]
文章列表b
[1,2,3,4,5,6,7,8,9]
文章列表c
[1,2,3,4,5,6,7,8,9]
文章列表d
[1,2,3,4,5,6,7,8,9]
我现在用for循环取出来的是一个一个的列表。列表里面是文章地址。如何用for循环把这些文章列表合并为一个列表。
[b]
for 循环这里直接改成这样就行 :
- for k in h:
- arc_href.extend([k])
复制代码
或者用加号:
- for k in h:
- arc_href += [k]
复制代码
你直接对一个字符串使用 extend 肯定会将字符串先转化为列表后与列表合并的,导致你链接字符串全部被拆分开来,参考代码:
- 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")
- list_url=[]
- for li in index_str:
- list_url=li.xpath(".//a[@target='_blank']/@href")
- # print(list_url)
- return list_url
- def arc_next(self,list_url): #请求列表页
- arc_href=[]
- 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:
- h=arc.xpath("./div/div[@class='artbox_l_t']/a/@href")
- arc_href +=h
- for k in h:
- arc_href.extend([k])
-
- return arc_href
- def arc_body(self,arc_href): #请求详情页
- for url in arc_href:
- html1=requests.get(url)
- html1.encoding='gb2312'
- 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=''.join(html.xpath("//div[@class='con_content']/*/text()")).strip()
- # print(title)
- # print(body)
- print('----------')
- 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)
- #4 获取数据
- title,body=self.arc_body(arc_href)
- #5 保存数据
- if __name__ == "__main__":
- zuowen=Zw()
- zuowen.run()
复制代码
[/b]
|
|