|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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]
|
|