def extract_data(html):
    # 做好ElementTree
    tree = etree.HTML(html)
    # 列表ls_content存储发表内容
    ls_content = []
    # 以列表形式,返回所有包含发表内容的td标签
    ls = tree.xpath('//td[@class="postbody"]')  #对应发表内容
    length = len(ls)
    j = 0  # 记录抓取评论数
    for i in range(length):
        j += 1
        try:
            ls_content.append(''.join(
                ls[i].xpath('.//text()')).strip())  # 把每个td标签中的文本放入列表中
        except:
            print('抓取第{}评论出错'.format(j))
            continue
    # 获取用户个人主页网址,最后一个是抓取自己的
    ls_urls = tree.xpath('//div[@class="auth"]/a/@href')  #名字 如'楼医生'
    # 用于存储用户个人基本信息
    ls_user_info = []
    n = 0
    for url in ls_urls:
        n += 1
        print("现在开始抓取第{}位用户的主页:{}".format(n, url))
        info = get_user_info(str(url))
        ls_user_info.append(info)
    ls_total = list(zip(ls_user_info, ls_content))  #打包成([]列表,''字符串)的元组
    print(ls_total[0])
    print("恭喜你!成功抓取信息{}条!".format(len(ls_total)))
    return ls_total
def get_user_info(
        url
):  #从一个人的个人主页中获取['楼医生', '常驻站友', '2', '35', '168', '63', '0', '3', '1']
    try:
        user_agent = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 \
        (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'

        headers = {'User-Agent': user_agent}
        r = requests.get(url, headers=headers)  # 爬取完整的网页数据
        r.raise_for_status()  # 如果状态不是200,引发HTTPError异常
        info = []
        t = etree.HTML(r.text)
        # 提取用户名
        info.append(
            t.xpath('//div[@class="banner-inner__user-id pa"]/a/text()')[0])
        # 提取用户等级,这里有两种情况,所以用了一个try...except进行处理
        try:
            info.append(t.xpath('//div[@class="user-level-area"]/text()')[0])
        except:
            info.append(
                t.xpath('//span[@class="level-wrap__level-title mr15"]/text()')
                [0])
        # 提取用户关注数、粉丝数、丁当数
        info.extend(
            t.xpath('//div[@class="follows-fans clearfix"]/div/p/a/text()'))
        # 提取用户帖子数、精华数、积分数、得票数
        info.extend(
            t.xpath('//div[@class="main-nav-inner"]/ul/li/span[1]/text()'))
        print(info)
        return info
    except:
        print("访问出错")
        return ""  # 发生异常,返回空字符串
Ejemplo n.º 3
0
def analyHtml(html):
    selector = etree.HTML(html)
    print(html)
    # //*[@id="content"]/div[1]/div[1]/div[1]/div/p[1]/a
    houselist = selector.xpath('//*[@id="content"]/div/div/div')
    # //*[@id="content"]/div[1]/div[1]/div[1]/a/img
    for house in houselist:
        print(house.xpath('div/p[1]/a/text()'))
        data_writer(house.xpath('div/p[1]/a/text()'))
        print(house.xpath('a/img/@data-src'))
        img_url = str(house.xpath('a/img/@data-src'))
        image_saver(trim_str(img_url), 'a')