【问题标题】:Crawler in Python, urlopen not workingPython中的爬虫,urlopen不起作用
【发布时间】:2018-11-04 06:25:31
【问题描述】:

我正在尝试从网页中提取一些信息,我有以下代码:

import re
from math import ceil
from urllib.request import urlopen as uReq, Request
from bs4 import BeautifulSoup as soup

InitUrl="https://mtgsingles.gr/search?q="
NumOfCrawledPages = 0
URL_Next = ""
NumOfPages=5

for i in range(0, NumOfPages):
    if i == 0:
        Url = InitUrl
    else:
        Url = URL_Next

    UClient = uReq(Url)  # downloading the url
    page_html = UClient.read()
    UClient.close()

    page_soup = soup(page_html, "html.parser")


    cards = page_soup.findAll("div", {"class": ["iso-item", "item-row-view"]})


    for card in cards:
        card_name = card.div.div.strong.span.contents[3].contents[0].replace("\xa0 ", "")

        if len(card.div.contents) > 3:
            cardP_T = card.div.contents[3].contents[1].text.replace("\n", "").strip()
        else:
            cardP_T = "Does not exist"

        cardType = card.contents[3].text
        print(card_name + "\n" + cardP_T + "\n" + cardType + "\n")


    try:
        URL_Next = "https://mtgsingles.gr" + page_soup.findAll("li", {"class": "next"})[0].contents[0].get("href")
        print("The next URL is: " + URL_Next + "\n")
    except IndexError:
        print("Crawling process completed! No more infomation to retrieve!")
    else:
        print("The next URL is: " + URL_Next + "\n")
        NumOfCrawledPages += 1
        Url= URL_Next

    finally:
        print("Moving to page : " + str(NumOfCrawledPages + 1) + "\n")

代码运行良好,没有出现错误,但结果不如预期。我正在尝试从页面中提取一些信息以及下一页的 url。最终我希望程序运行 5 次并爬取 5 页。但是此代码对给定的初始页面 (InitUrl="xyz.com") 进行了 5 次抓取,并且不会在提取的下一页 url 中继续进行。我尝试通过输入一些打印语句来调试它,以查看问题出在哪里,我认为问题出在这些语句上:

 UClient = uReq(Url) 
 page_html = UClient.read()
 UClient.close()

由于某种原因 urlopen 在 for 循环中不能重复工作。为什么会这样?在for语句中使用urlopen有错吗?

【问题讨论】:

    标签: python-3.x web-crawler urlopen


    【解决方案1】:

    此站点通过 Ajax 请求获取数据。所以你必须发送post请求来获取数据。

    提示:正确选择 Url 例如:https://mtgsingles.gr/search?ajax=products-listing&q=

    【讨论】:

      猜你喜欢
      • 2016-08-27
      • 1970-01-01
      • 1970-01-01
      • 2018-01-30
      • 1970-01-01
      • 2016-01-23
      • 2012-04-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多