【发布时间】:2017-09-23 04:29:23
【问题描述】:
我正在编写用于从 .aspx 网页抓取信息的废代码。我想检索数据库中的所有记录,但我没有记录索引的列表。我只知道索引是1到9000000之间的整数。因此,我正在考虑通过for循环对索引使用蛮力。
我想从每条记录中检索某些信息。所以,我使用 beautifulsoup 和 pandas.DataFrame 来存储我想要的信息。然后,我附加数据框以收集记录。
例如:
df_all = pandas.DataFrame(col= ['A', 'B', 'C'])
# id: Unique id of each record; df_all: the dataframe that stores the records
def func(id, df_all):
"""
Use beautifulsoup to collect the info from the webpage
"""
df_temp = pd.DataFrame([1,2,3], col= ['A', 'B', 'C'])
df_all = df_all.append(df_temp, ignore_index= True)
return df_all
我正在考虑使用多个 for 循环同时执行 func 函数。比如第一个客户端做1到22500000;第二个客户端执行 22500001 到 4500000;等等。然后我可以结合每个客户的结果。我尝试使用 ipyparallel、multiprocessing.pool 和 joblib。但是,我的函数结构似乎不适合并行处理。我应该如何修改我的结构以执行并行 for 循环任务?或者有没有更好的方法从数据库中获取数据?数据库中只有大约 29k+ 条记录。对从 1 到 90000000 的索引使用蛮力确实不是解决此问题的最佳方法。
【问题讨论】:
-
请详细说明。您拥有该网站,还是其他人的?如果是别人的,你如何连接到他们的数据库?为什么需要索引?你在哪里调用 BeautifulSoup,它返回什么对象?唱片长什么样?目标是将记录存储在 Pandas 数据框中吗?
-
最简单的调用记录信息的方法是使用对应的id。我在函数内部调用了美丽的汤,因为每条记录都有自己的网页。链接类似于propaccess.trueautomation.com/clientdb/…。但我必须先从链接中获取 cookie:propaccess.trueautomation.com/clientdb/?cid=39。然后,我通过替换 id 号连接到每个页面
标签: python python-3.x web-scraping parallel-processing beautifulsoup