晋江年下文爬取【xpath】

 

'''
@Modify Time      @Author   目标:晋江年下文 爬取6页
------------      ------- http://www.jjwxc.net/search.php?kw=%C4%EA%CF%C2&t=1&p=1
2019/8/31 15:19   laoalo
'''

import requests
from lxml import etree

head = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134',
    'Host':'www.jjwxc.net',
}

def get_page_detail(url):
    # 得到当前页面中每本书的url
    response = requests.get(url=url,headers=head,timeout=50).text
    book = etree.HTML(response).xpath('//h3[@class="title"]/a/@href')
    # print(etree.tostring(book,encoding='gbk').decode('gbk'))
    return book

def get_book_detial(book_url):
    # 得到每本书的详细信息
    try:
        response = requests.get(url=book_url, headers=head, timeout=50).text
        book_detail = etree.HTML(response)
        book = {}

        title = book_detail.xpath("//span[@itemprop='articleSection']//text()")[0].encode('ISO-8859-1').decode('gbk')
        book['title'] = title
        author = book_detail.xpath("//span[@itemprop='author']//text()")[0].encode('ISO-8859-1').decode('gbk')
        book['author'] = author
        information = book_detail.xpath("string(//div[@id='novelintro'])").encode('ISO-8859-1').decode('gbk')
        book['information'] = information

        return book
    except IndexError as e:
        print(e,'下标越界')

    # targets = book_detail.xpath("//text()")
    # for index,target in enumerate(targets):
    #     print(index,'*'*30,target.encode('ISO-8859-1').decode('gbk'))
    # '''
    # 标签爬不出来
    # '''


def spider():
    bookshelf = []
    for i in range(1,5):
        print("这是第{index}页的信息\n\n\n".format(index=i))
        url = 'http://www.jjwxc.net/search.php?kw=%C4%EA%CF%C2&t=1&p={page_num}'.format(page_num=i)
        book_list = get_page_detail(url)
        for i in book_list:
            # print(get_book_detial(i))
            bookshelf.append(get_book_detial(i))
    return bookshelf
        # print(url)
if __name__ == '__main__':
    # print(get_book_detial("http://www.jjwxc.net/onebook.php?novelid=3402626"))
    print(spider())

时常会有:"list index out of range 下标越界",或是"TimeoutError: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败",有的师傅说是因为访问过快,导致list的赋值没附上……代码有待优化

转载于:https://www.cnblogs.com/chrysanthemum/p/11449324.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用Python爬取XPath,你可以使用lxml库来解析HTML或XML文档,并使用XPath语法来定位和提取所需的数据。 首先,确保你已经安装了lxml库。你可以使用pip命令进行安装,如下所示: ``` pip install lxml ``` 接下来,你需要导入lxml库和requests库,并定义请求头和目标网址。例如,在爬取CSDN网站的头条博客标题时,你可以使用如下代码: ```python import requests from lxml import etree headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36" } url = "https://www.csdn.net/" response = requests.get(url=url, headers=headers) ``` 然后,使用etree模块的HTML方法将响应文本转换为可解析的HTML格式。例如: ```python data = etree.HTML(response.text) ``` 现在,你可以使用XPath语法来定位和提取数据。例如,如果你想获取头条博客的标题和链接,你可以使用以下代码: ```python names = data.xpath("//div[@class='headlines']/div[@class='headlines-right']//div[@class='headswiper-item']/a/text()") urls = data.xpath("//div[@class='headlines']/div[@class='headlines-right']//div[@class='headswiper-item']/a/@href") blog_list = list(zip(names, urls)) for blog in blog_list: print(blog) ``` 上述代码中,我们使用XPath的定位路径来选择具有特定class值的div标签下的a标签的文本和链接。 总结起来,你需要经过以下步骤来爬取XPath: 1. 导入所需的库,包括lxml和requests。 2. 发送HTTP请求到目标网址,并获取响应。 3. 使用etree.HTML方法将响应文本转换为可解析的HTML格式。 4. 使用XPath语法来定位和提取所需的数据。 希望这可以帮助到你!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值